package com.catazy.base.data.retrofit

/**
 * 作者: Tao
 * 日期: 2024/12/20
 * 时间: 14:37
 * 描述: 密封接口，用于表示API调用的结果
 * 这个接口密封了三种可能的结果：成功、错误和异常
 * 使用密封接口可以让处理结果的代码更加安全和可控
 *
 * @param T 泛型参数，表示API调用返回的数据类型
 */
sealed interface ApiResult<T> {

    /**
     * 表示API调用成功的类
     * 包含了调用返回的数据
     *
     * @param data API调用返回的数据
     */
    class Success<T>(val data: T) : ApiResult<T>

    /**
     * 表示API调用发生错误的类
     * 包含了错误代码和可选的错误消息
     *
     * @param code 错误代码
     * @param message 可选的错误消息
     */
    class Error<T>(val code: Int, val message: String?) : ApiResult<T>

    /**
     * 表示API调用发生异常的类
     * 包含了异常对象
     *
     * @param throwable 异常对象
     */
    class Exception<T>(val throwable: Throwable) : ApiResult<T>
}